package es.udc.acs.parser;

public class ParserMensaje {
	
	// funciones cabecera
	
	public static String obtenerOrigen(String mensaje) {
		
		return mensaje.substring(0,8);
	} 
	
	public static String obtenerDestino(String mensaje) {
		
		return mensaje.substring(8,16);
	} 
	
	public static String obtenerTipo(String mensaje) {
		
		return mensaje.substring(16,18);
	} 
	
	
	// funciones separar, tenemos 4 combinaciones
	// cabecera + (obtenerCuerpo) 
	// cabecera + (obtenerSubcabecera) + (obtenerCuerpoSub)
	// cabecera + (obtenerCodResCajero) + (obtenerCuerpoCResCajero)
	// cabecera + (obtenerSubcabecera) + (obtenerCodRes) + (obtenerCuerpoSubCRes)
	
	public static String obtenerCuerpo(String mensaje) {
		
		return mensaje.substring(18);
	} 
	
	public static String obtenerSubcabecera(String mensaje) {
		
		return mensaje.substring(18,26);
	} 
	
	public static String obtenerCuerpoSub(String mensaje) {
		
		return mensaje.substring(26);
	} 
	
	public static String obtenerCodRes(String mensaje) {
		
		return mensaje.substring(26,28);
	} 
	
	public static String obtenerCuerpoSubCRes(String mensaje) {
		
		return mensaje.substring(28);
	} 
	
	public static String obtenerCodResCajero(String mensaje) {
		
		return mensaje.substring(18,20);
	} 
	
	public static String obtenerCuerpoCResCajero(String mensaje) {
		
		return mensaje.substring(20);
	} 
	
	
	// funciones subcabecera de mensajes de datos
	
	public static String obtenerCanal(String subcabecera) {
		
		return subcabecera.substring(0,2);
	}
	
	public static String obtenerNumMensaje(String subcabecera) {
		
		return subcabecera.substring(2,7);
	}
	
	public static String obtenerCodOnline(String subcabecera) {
		
		return subcabecera.substring(7,8);
	}
	
	
	// funciones solicitud control
	
	public static String obtenerNumCanalesAS(String cuerpo) {
			
			return cuerpo.substring(0,2);
	}
	
	public static String obtenerFechaAS(String cuerpo) {
		
		return cuerpo.substring(2,12);
	}
	
	public static String obtenerHoraAS(String cuerpo) {
		
		return cuerpo.substring(12,20);
	}
	
	public static String obtenerPuertoAS(String cuerpo) {
		
		return cuerpo.substring(20,40);
	}
	
	// el indice es 0 para la solicitud y 4 para la respuesta
	public static String obtenerReintegrosCS(String cuerpo, int in) {
		
		return cuerpo.substring(in+0,in+10);
	}
	
	public static String obtenerAbonosCS(String cuerpo,int in) {
		
		return cuerpo.substring(in+10,in+20);
	}
	
	public static String obtenerTraspasosCS(String cuerpo,int in) {
		
		return cuerpo.substring(in+20,in+30);
	}
	
	
	// funciones respuesta control
	
	public static String obtenerCodRespuesta(String cuerpo) {
		
		return cuerpo.substring(0,2);
	}
	
	public static String obtenerCodError(String cuerpo) {
		
		return cuerpo.substring(2,4);
	}
	
	
	// funciones datos
	
	public static String obtenerNumTarjeta(String cuerpo) {
		
		return cuerpo.substring(0,11);
	}
	
	public static String obtenerBanco(String tarjeta) {
		
		return tarjeta.substring(0,8);
	}
	
	public static String obtenerTarjeta(String tarjeta) {
		
		return tarjeta.substring(9,11);
	}
	
	// tmb sirve para la cuenta origen
	public static String obtenerNumCuenta(String cuerpo) {
		
		return cuerpo.substring(11,12);
	}
	
	public static String obtenerImporte(String cuerpo) {
		
		return cuerpo.substring(12,16);
	}
	
	public static String obtenerNumCuentaD(String cuerpo) {
		
		return cuerpo.substring(12,13);
	}
	
	public static String obtenerImporteTraspaso(String cuerpo) {
		
		return cuerpo.substring(13,17);
	}
	
	// respuestas datos
	
	public static String obtenerSigno(String cuerpo) {
		
		return cuerpo.substring(0,1);
	}
	
	public static String obtenerSaldo(String cuerpo) {
		
		return cuerpo.substring(1,11);
	}
	
	public static String obtenerSignoT(String cuerpo) {
		
		return cuerpo.substring(11,12);
	}
	
	public static String obtenerSaldoT(String cuerpo) {
		
		return cuerpo.substring(12,22);
	}
	
	public static String obtenerNumMov(String cuerpo) {
		
		return cuerpo.substring(0,2);
	}
	
	// in es el numero de movimiento a parsear, empezando en 0
	public static String obtenerTipoMov(String cuerpo, int in) {
		
		return cuerpo.substring(2+(29*in),4+(29*in));
	}
	
	public static String obtenerSignoMov(String cuerpo,int in ) {
		
		return cuerpo.substring(4+(29*in),5+(29*in));
	}
	
	public static String obtenerImporteMov(String cuerpo,int in ) {
		
		return cuerpo.substring(5+(29*in),13+(29*in));
	}
	
	public static String obtenerFechaMov(String cuerpo,int in) {
		
		return cuerpo.substring(13+(29*in),23+(29*in));
	}
	
	public static String obtenerHoraMov(String cuerpo,int in) {
		
		return cuerpo.substring(23+(29*in),31+(29*in));
	}
	
	// funciones server/puerto
	
	public static String obtenerServer(String p) {
		
		return p.substring(0,15);
	}
	
	public static String obtenerPuerto(String p) {
		
		return p.substring(16);
	}
}
